# -*- coding: utf-8 -*-

'''
@Time    : 2020/2/18 11:08
@Author  : Chen Liu
@FileName: ispower_three.py
@Software: PyCharm
 
'''


# 3的幂
# 解法一：
# 思路：输入是32位有符号整数，范围是[-2^31~2^31-1]，即[-2147483648~2147483647]，
# 在这个范围内3的幂是有限的，而且最大的是3^19=1162261467，这个最大的3的幂除以其他任何一个3的幂，
# 余数一定是0，而除以任何一个不是3的幂的数，则余数一定不为零，根据这个原理，我们就可以解决3的幂的判别问题。

# class Solution:
#     def isPowerOfThree(self, n: int) -> bool:
#
#         return n > 0 and 3 ** 19 % n == 0


# 解法二：
# 思路：math.log(n,3)与真实值存在偏差，需要进行四舍五入
class Solution:
    def isPowerOfThree(self, n: int) -> bool:
        # return n>0 and 3 **19 % n == 0
        if n <= 0:
            return False

        import math
        # math.log（243，3）= 4.9999,因此需要进行四舍五入
        res = math.log(n, 3)

        return 3 ** round(res) == n


if __name__ == "__main__":
    s = Solution()
    res = s.isPowerOfThree(243)
    print(res)
